package com.gui.sup;

import java.awt.BorderLayout;
import java.awt.GridLayout;

import javax.print.attribute.standard.JobMessageFromOperator;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import com.controller.SupCon;
import com.gui.baseframe.BaseFrame;

public class SupFrame extends BaseFrame {
	private static final int WEST_BUT_COL_NUM = 13; // 总界面中左面按钮列的按钮数量
	private static final String[] COMPAN = { "读者", "管理员" }; // 权限的字符串数组
	private static final String STR_MATCHES_MATH = "\\d+"; // 如果

	JTable adminTab; // 表格
	JPanel center; // 中间面板
	JTable userTab; // 表格
	JScrollPane adminJSP; // 表格的容器
	JScrollPane userJSP; // 表格的容器
	JTabbedPane jtab;	//选项页容器
	JPanel firPan;	//选项页的第一项
	JButton selectAll;	//查询所有的按钮

	public SupFrame() {
		setLayout(new BorderLayout()); // 布局方式
		JPanel west = west(); // 调用创建左边面板
		add(west, BorderLayout.WEST);
		center = center(); // 创建中间布局面板
		add(center, BorderLayout.CENTER);
		init(); // 调用父类初始化
	}

	/**
	 * 西边的窗口布局
	 * 
	 * @return 返回左布局窗口
	 */
	private JPanel west() {
		JPanel east = new JPanel(); // 创建左边的面板
		east.setLayout(new GridLayout(WEST_BUT_COL_NUM, 1)); // 创建13行1列的按钮列
		selectAll = new JButton("查询所有"); // 按钮
		selectAll.addActionListener((e) -> { // 监听器
			SupCon sc = new SupCon();	
			SupFrame.this.userTab = sc.quaryReaderAll("reader");	// 获取查询出来的表格
			SupFrame.this.adminTab = sc.quaryReaderAll("admin");
			center = center(); // 重新赋予布局
			SupFrame.this.remove(center);	//先删除旧的布局
			SupFrame.this.add(center);	//添加新的布局
			SupFrame.this.center.updateUI(); // 刷新中间布局面板
		});// end listener
		JButton exit = new JButton("退出");
		exit.addActionListener((e) -> System.exit(0)); // 直接退出系统
		east.add(selectAll); // 添加
		east.add(exit);
		return east;
	}

	/**
	 * 中间窗口布局
	 * 
	 * @return 返回中间布局窗口
	 */
	private JPanel center() {
		JPanel center = new JPanel(); // 创建中间面板
		center.setLayout(new GridLayout(1, 1)); // 创建一行一列的布局
		jtab = new JTabbedPane(); // 存放选项卡的组件
		jtab.addChangeListener((e)->{
			if(((JTabbedPane)e.getSource()).getSelectedIndex()!=0){	//如果不是第一页选项卡
				selectAll.setEnabled(false);	//禁用查询全表的功能
			}else{
				selectAll.setEnabled(true);	//启用查询功能
			}
		});
		JPanel firPan = firPan(); // 调用创建标签页中的第一页
		JPanel secPan = secPan(); // 调用创建标签页中的第二页
		jtab.addTab("所有用户", firPan); // 添加到选项卡组件中
		jtab.addTab("修改权限", secPan); // 添加到选项卡组件中
		center.add(jtab); // 由中间的布局容器添加选项卡组件
		return center;
	}

	/**
	 * 第一张标签页
	 * 
	 * @return 标签页
	 */
	private JPanel firPan() {
		firPan = new JPanel(); // 创建标签页中的第一页
		firPan.setLayout(new GridLayout(2, 1)); // 创建2行1列的布局
		adminJSP = new JScrollPane(adminTab); // 添加到滚动条面板中
		userJSP = new JScrollPane(userTab); // 添加到滚动条面板中
		firPan.add(adminJSP); // 添加到主面板
		firPan.add(userJSP);

		return firPan;
	}

	/**
	 * 第二章标签页
	 * 
	 * @return 标签页
	 */
	private JPanel secPan() {
		JPanel secPan = new JPanel(); // 创建标签页中的第二页
		secPan.setLayout(new GridLayout(3, 1)); // 创建2行1列的面板
		JPanel competence = competencePanel();
		secPan.add(competence);
		return secPan;
	}

	/**
	 * 修改权限
	 * 
	 * @return
	 */
	private JPanel competencePanel() {
		JPanel panel = new JPanel(); // 最大的面板
		panel.setLayout(new GridLayout(3, 1)); // 最大的面板分为3行1列
		JPanel first = new JPanel(); // 第一行的面板
		JLabel tip = new JLabel("根据ID修改个人的权限"); // 第一行显示提示
		first.add(tip); // 添加至第一行面板
		panel.add(first);
		JPanel second = new JPanel(); // 第二行的面板
		JLabel idLab = new JLabel("修改者ID：");
		JTextField id = new JTextField(10);
		JLabel comLab = new JLabel("修改为：");
		JComboBox<String> box = new JComboBox<>(COMPAN); // 创建下拉列表框并初始化
		second.add(idLab); // 添加
		second.add(id);
		second.add(comLab);
		second.add(box);
		panel.add(second);
		JPanel third = new JPanel();
		JButton update = new JButton("修改");
		update.addActionListener((e) -> {
			int i = box.getSelectedIndex(); // 获取想要修改为用户或者是管理员， 0是用户，1是管理员
			String sid = id.getText(); // 获取想要修该的人的ID
			boolean flag = false; // 默认为修改false
			if ("".equals(sid) || sid == null) { // 如果没有填写id
				JOptionPane.showMessageDialog(null, "请输入ID");
			} else { // 填写了ID
				if (sid.matches(STR_MATCHES_MATH)) {
					SupCon sc = new SupCon(); // 实例化控制层对象
					flag = sc.updateCom(sid, i); // 调用修改方法,返回是否修改成功的标记
				} else { // 不是数字
					JOptionPane.showMessageDialog(null, "请填写数字ID");
				}
			}
			if (flag == false) {
				JOptionPane.showMessageDialog(null, "修改失败");
			} else {
				JOptionPane.showMessageDialog(null, "修改成功");
			}
		});
		third.add(update);
		panel.add(third);
		return panel;
	}
}
